#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;
const int I=-6e16;
class pq{
  private:
    priority_queue<int> q,qd;
  public:
    inline void add(int x){q.push(x);}
    inline void del(int x){qd.push(x);}
    inline int get(){
      while(!q.empty()){
        int u=q.top();
        if(!qd.empty()&&u==qd.top()){
          q.pop(),qd.pop(); continue;
        }
        return u;
      }
      return I;
    }
};
main(){
  freopen("holiday.in","r",stdin);
  freopen("holiday.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int n,k,d; cin>>n>>k>>d;
  vector<int> h(n),t(n-1),f(n,I);
  for(auto &i:h)cin>>i;
  for(auto &i:t)cin>>i;
  vector<vector<int> > D(n);
  for(int i=0;i<n-1;i++)
    if(i+t[i]+1<n)D[i+t[i]+1].emplace_back(i);
  vector<int> r(n),o(k),s(k,-d);
  pq q; q.add(o[0]=f[0]=h[0]),s[0]+=d;
  for(int i=1;i<k;i++)q.add(o[i]=I);
  vector<multiset<int,greater<> > > S(k);
  S[0].emplace(h[0]);
  for(int i=1;i<n;i++){
    int r=i%k; s[r]+=d,q.del(o[r]),q.add(o[r]-=d);
    for(int j:D[i]){
      int x=j%k; S[x].erase(S[x].find(f[j]+j/k*d));
      q.del(o[x]),q.add(o[x]=(S[x].empty()?I:*S[x].begin()-s[x]));
    }
    S[r].emplace((f[i]=q.get()+h[i])+s[r]);
    if(f[i]>o[r])q.del(o[r]),q.add(o[r]=f[i]);
  }
  cout<<f[n-1]<<endl;
  return 0;
}